package mx.com.theboard.client.registro;

import mx.com.theboard.client.Main;
import mx.com.theboard.client.Mensaje;
import mx.com.theboard.client.Utils;
import mx.com.theboard.client.InterfacesServlets.RegistroAsync;
import mx.com.theboard.shared.entidades.Pizarron;
import mx.com.theboard.shared.entidades.Usuario;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.*;
import com.google.gwt.user.client.ui.ValueBoxBase.TextAlignment;
import com.google.gwt.user.client.ui.FormPanel.*;

public class Registro extends FormPanel implements ClickHandler{
	
	 private VerticalPanel grid = new VerticalPanel();
	 private TextBox nombre,usuario,mail;
	 private PasswordTextBox pass,passConf;
		public Registro() {
	        super();
	        
	        //settings	        
	        setWidget(grid);
	        grid.setHeight("304px");
	        setStyleName("formPanel");	        
	        grid.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
			grid.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);			
			initFormulario();	        	        	  
	       
	    }
		
		private void initFormulario(){
			Label label = new Label("Registro:");
			label.setStyleName("textoblanco titulologin");
			label.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
			label.setWidth("281px");
			
			nombre = new TextBox();
			nombre.setStyleName("fuentetexto");
			nombre.setSize("287px", "25px");
			nombre.setName("nombre");
			nombre.setAlignment(TextAlignment.LEFT);
			nombre.setValue("Nombre");
			nombre.setTitle("Nombre");
			Utils.addPlaceHolder(nombre, "Nombre");
			
			
			usuario = new TextBox();
			usuario.setStyleName("fuentetexto");
			usuario.setSize("287px", "25px");
			usuario.setName("usuario");
			usuario.setAlignment(TextAlignment.LEFT);
			usuario.setValue("Usuario");
			Utils.addPlaceHolder(usuario, "Usuario");
			
			pass = new PasswordTextBox();
			pass.setStyleName("fuentetexto");
			pass.setAlignment(TextAlignment.LEFT);
			pass.setSize("287px", "25px");
			pass.setName("password");
			pass.setValue("Password");
			Utils.addPlaceHolder(pass, "Password");
			
			
			passConf = new PasswordTextBox();
			passConf.setStyleName("fuentetexto");
			passConf.setAlignment(TextAlignment.LEFT);
			passConf.setSize("287px", "25px");
			passConf.setName("passwordConf");
			passConf.setValue("Password");
			Utils.addPlaceHolder(passConf, "Password");
			
			mail = new TextBox();
			mail.setStyleName("fuentetexto");
			mail.setSize("287px", "25px");
			mail.setName("mail");
			mail.setAlignment(TextAlignment.LEFT);
			mail.setValue("e-mail");
			Utils.addPlaceHolder(mail, "e-mail");
			
			Button submit = new Button("Enviar");
			submit.addClickHandler(this);
			
	        grid.add(label);
			grid.add(nombre);
	        grid.add(usuario);
	        grid.add(pass);
	        grid.add(passConf);
	        grid.add(mail);
	        grid.add(submit);

		}

		

		@Override
		public void onClick(ClickEvent event) {
			if(isValidNombre())
				if(isValidUsuario())
					if(isValidPassword())
						if(isValidMail()){
							Usuario usuariobj = new Usuario();
							usuariobj.setNombre(nombre.getValue());
							usuariobj.setUsuario(usuario.getValue());
							usuariobj.setPassword(pass.getValue());
							usuariobj.setMail(mail.getValue());
							
							RegistroAsync registro = GWT.create(mx.com.theboard.client.InterfacesServlets.Registro.class);
							registro.greetServer(usuariobj,
											new AsyncCallback<Usuario>() {
												public void onFailure(Throwable caught) {
													Mensaje m = new Mensaje("Error", "Error al tratar de comunicarse con el servidor.");
													m.center();
													m.show();
												}

												@Override
												public void onSuccess(Usuario result) {
													if(result != null){																											
														Main.getPizarron(result);
													}else{
														Mensaje db = new Mensaje("Error","No se pudo registrar, el ususario ya existe!");
														db.setModal(true);
														db.center();				
														db.show();
													}
												}
												
											});
							
						}
			
		}
		
		public boolean isValidUsuario(){
			if(!usuario.getValue().equals("") 
					&& !usuario.getValue().equals("Usuario") 
					&& !usuario.getValue().equals(" ")){
				return true;
			}else{
				Mensaje db = new Mensaje("Error","Nombre de usuario incorrecto!");
				db.setModal(true);
				db.center();				
				db.show();	
				return false;
			}
		}
		
		public boolean isValidNombre(){
			if(!nombre.getValue().equals("") 
					&& !nombre.getValue().equals("Nombre") 
					&& !nombre.getValue().equals(" ")){
				return true;
			}else{
				Mensaje db = new Mensaje("Error","Nombre incorrecto!");
				db.setModal(true);
				db.center();				
				db.show();	
				return false;
			}
		}
		
		public boolean isValidMail(){
			if(!mail.getValue().equals("") 
					&& !mail.getValue().equals("e-mail") 
					&& !mail.getValue().equals(" ") && mail.getValue().contains("@") && mail.getValue().contains(".")){
				return true;
			}else{
				Mensaje db = new Mensaje("Error","E-mail incorrecto!");
				db.setModal(true);
				db.center();				
				db.show();	
				return false;
			}
		}
		
		public boolean isValidPassword(){
			if(!pass.getValue().equals("") 
					&& !pass.getValue().equals("Password") 
					&& !pass.getValue().equals(" ")){
				if(pass.getValue().equals(passConf.getValue()))
					return true;
				else{
					Mensaje db = new Mensaje("Error","Los passwords no son iguales!");
					db.setModal(true);
					db.center();				
					db.show();	
					return false;
				}
			}else{
				Mensaje db = new Mensaje("Error","Password incorrecto!");
				db.setModal(true);
				db.center();				
				db.show();	
				return false;
			}
		}
		
		

	    
	    
}